<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <my-father></my-father>
    </div>

    <!-- 父组件 -->
    <template id="father">
        <div>
            <h2>我是父组件--{{ nums }}</h2>
            <button @click="add">+++</button>
            <my-son :num="nums"></my-son>
        </div>
    </template>

    <!-- 子组件 -->
    <template id="son">
        <div>
            <h5>我是子组件--{{ num }}</h5>
            <!-- {{ obj }} -->
            <!-- {{ arr }} -->
            <button @click="add">+++</button>
        </div>
    </template>


    <script src="./vue.js"></script>
    <script>
        // 父向子传递的数据为只读
        // 子组件
        const Son = {
            // 第一种写法
            // props: ["num"],
            // 第二种写法
            // props: {
            //     // 为了验证传递的类型
            //     num: Array
            // },
            // 第三种写法
            props: {
                num: {
                    // 验证类型
                    type: String,
                    // 默认值  (引用类型有所不同)
                    // default: "我是默认值",
                    // 是否必传
                    required: true
                },
                obj: {
                    type: Object,
                    default: () => {
                        return {
                            name: "默认名称"
                        }
                    }
                },
                arr: {
                    type: Array,
                    default: () => {
                        return [4, 5, 6]
                    }
                }
            },
            template: "#son",
            methods: {
                add() {
                    this.num += 1
                }
            }
        }


        // 父组件
        const Father = {
            template: "#father",
            data() {
                return {
                    nums: "88",
                    obj: {
                        name: "张三"
                    },
                    arr: [1, 2, 3]
                }
            },
            components: {
                "my-son": Son
            },
            methods: {
                add() {
                    this.nums += 1
                }
            }
        }

        new Vue({
            el: "#app",
            // 注册组件
            // components: { 组件名称: 组件内容 }
            components: {
                "my-father": Father
            }
        })
    </script>
</body>

</html>